<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <script>
        function A() {
            return "A";
        }

        // console.log(A);
        // console.log(A.prototype);
        // console.log(A.__proto__===Function.prototype);
        // console.log(A.prototype.__proto__===Object.prototype);


        function B() {
            return "B"
        }

        // B继承A 继承方法1
        // Reflect.setPrototypeOf(B, A); // B.__proto__=A
        // Reflect.setPrototypeOf(B.prototype, A.prototype);// B.prototype.__proto__=A.prototype
        // console.log(B);
        // console.log(B.prototype);
        // console.log(B.__proto__ === A);
        // console.log(B.prototype.__proto__ === A.prototype);
        // let b=new B();
        // console.log(b.__proto__===B.prototype);


        // D继承C 继承方法2
        function C() {
            return "C";
        }

        function D() {
            return "D"
        }

        D.__proto__ = Object.create(C).__proto__
        D.prototype.__proto__ = Object.create(C.prototype).__proto__;
        console.log(D);
        console.log(D.prototype);
        console.log(D.__proto__ === C);
        console.log(D.prototype.__proto__ === C.prototype);
        let d = new D();
        console.log(d.__proto__ === D.prototype);
        console.log(d.__proto__.__proto__ === (new C).__proto__);












        // Object.defineProperty(Object.prototype, '__proto__', {
        //     get() {
        //         let _thisObj = Object(this);
        //         return Object.getPrototypeOf(_thisObj);
        //     },
        //     set(proto) {
        //         if (this === undefined || this === null) {
        //             throw new TypeError();
        //         }
        //         if (!isObject(this)) {
        //             return undefined;
        //         }
        //         if (!isObject(proto)) {
        //             return undefined;
        //         }
        //         let status = Reflect.setPrototypeOf(this, proto);
        //         if (!status) {
        //             throw new TypeError();
        //         }
        //     },
        // });

        // function isObject(value) {
        //     return Object(value) === value;
        // }

        // let obj = new Object();
        // console.log(Reflect.getPrototypeOf(obj));
        // obj.__proto__ = { name: "szq", age: 11 };

        // console.log(obj.__proto__);

        // function Point(x, y) {
        //     this.x = x;
        //     this.y = y;
        // }

        // Point.prototype.toString2 = function () {
        //     return '(' + this.x + ', ' + this.y + ')';
        // };

        // // var p = new Point(1, 2);
        // // console.log(p);

        // var p = { name: "11", age: "11" };

        // Reflect.getPrototypeOf(p).toString2 = function () { return "11" };
        // p["toString2"] = function () { return "22" };
        // p.toString3 = function () { return "33" };
        // // Reflect.setPrototypeOf(p, Point);
        // console.log(p);

    </script>
</head>

<body>

</body>

</html>